In this notebook we analyze the first “think/believe” task, in which participants completed a series of closey matched fill-in-the-blanks by choosing between two options: “think” and “believe.”

NAs introduced by coercion

Overview

From the preregistration (link):

“Our overarching hypothesis for the present study is that […] other languages will have an epistemic verb that is more likely to be used for religious attitude reports (similar to English “believe”) and a different epistemic verb that is more likely to be used for matter-of-fact attitude reports (similar to English “think”).

For this study, we are examining five languages in five regions of interest: (i) Mandarin in China; (ii) Thai in Thailand; (iii) Bislama (an English-based creole language) on the Melanesian Island of Vanuatu; (iv) Fante in Ghana; and (v) American English in the Bay Area, California.

We thus have five more specific sub-hypotheses. For each of the first four languages / regions of interest, we hypothesize that a set of words or phrases exists whose usage parallels the difference between usage of “think” and “believe” in American English, with one word or phrase (the “think” analogue) being used for more matter-of-fact attitude reports and the other (the “believe” analogue) being more likely to be used for religious attitude reports. That gives us our first four sub-hypotheses: that Mandarin, Thai, Bislama and Fante speakers will each use two different words in a manner parallel to the use of “think” and “believe” in an American English setting as identified by Heiphetz, Landers, and Van Leeuwen. Our fifth sub-hypothesis is that the Bay Area portion of the study will replicate the results of the earlier study of Heiphetz, Landers, and Van Leeuwen."

KW EXECUTIVE SUMMARY (2020-01-20): We replicated the original finding in the US (and the findings of Think Believe 1 and 2): participants were more likely to circle “believe” for sentences in religious contexts than sentences in scientific contexts. We found the same pattern in four out of the five countries/langauges included in this study, with the exception of Ghana.

As in previous studies, the pattern was weaker in Ghana/Fante than in other countries/languages – indeed, it was not present. As in Think Believe 1 (but not Think Believe 2), the pattern was stronger in Thailand/Thai.

Samples

Before we begin, it’s important to note that we had unequal sample sizes by country:

However, 49 participants completed this task after completing other surveys, and an additional 16 failed the attention check. In the following analyses I will exclude these participants, leaving us with the following samples:

Plots

We’ll begin by plotting responses of “think” (red) vs. “believe” (turquoise) to get an overall sense of any patterns in the data.

By category

By question

Analysis: KW without looking at preregistration

Here’s how I analyzed the data before looking at the preregistration. I think these analyses are valuable because they’re a little more efficient than the preregistered analyses – no need for follow-up tests – and they directly test the question of whether the effect of interest varies across countries/langauges.

Technical note: Unless specified otherwise, all of these analyses use “effect coding” for categorical variables (e.g., country, category of question) – meaning that each country/langauge is compared to the “grand mean” collapsing across all countries/languages. Because of degrees of freedom issues, each analysis only compares 4 of the 5 countries to the grand mean – by default, I’ve left out the comparison of the US/English to the grand mean, but stats for that comparison could easily be calculated (if we left out another country/language instead). This is just to say that you won’t see statements like “The effect was exaggerated in the US relative to other countries,” although they might be true.

KW Analysis #1

First, I used a mixed effects logistic regression predicting how likely a participant was to circle “believe” based on the superordinate category of the question (“religious” questions or “fact” questions), the country they were in/language they were using (US/English, Ghana/Fante, Thailand/Thai, China/Mandarin, or Vanuatu/Bislama), and an interaction between them, with a maximal random effects structure (random interpcepts and slopes by subject, and random intercepts by question). This analysis gives me a sense of (1) Whether participants were more likely to circle “believe” for religious questions than fact questions, and whether this tendency varied by country/language, controlling for the fact that the overall rates of circling “believe” might vary by country/language (and accounting for individual differences and differences across individual questions).

r3.1 <- lmer(believe ~ super_cat * country 
             # + (1 + super_cat | thb3_subj) + (1 | question), # failed to converge
             # + (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
             # + (1 + super_cat | thb3_subj), # failed to converge
             # + (1 + super_cat || thb3_subj), # failed to converge
             + (1 | thb3_subj) + (1 | question),
             data = d3_long)
Parameter β β' β'' Std. Err. df t p
Intercept 0.57 - - 0.03 8.32 18.38 <0.001 ***
Category (religious) 0.10 0.21 0.21 0.03 8.04 3.32 0.010 *
Country (Gh.) 0.04 0.05 0.05 0.02 323.00 2.23 0.026 *
Country (Th.) -0.01 -0.02 -0.02 0.02 323.00 -0.75 0.454
Country (Ch.) -0.02 -0.03 -0.03 0.02 323.00 -1.17 0.242
Country (Vt.) -0.01 -0.01 -0.01 0.02 323.00 -0.40 0.692
Category (religious) × Country (Gh.) -0.09 -0.11 -0.11 0.02 2939.00 -5.42 <0.001 ***
Category (religious) × Country (Th.) 0.05 0.06 0.06 0.02 2939.00 3.07 0.002 **
Category (religious) × Country (Ch.) 0.01 0.01 0.01 0.02 2939.00 0.52 0.602
Category (religious) × Country (Vt.) -0.02 -0.03 -0.03 0.02 2939.00 -1.40 0.162

The effects of primary interest are in bold:

  • Category (religious): Collapsing across countries/languages, participants were indeed more likely to say “believe” for “religious” questions, echoing Think Believe 1 and 2.
  • Country (Gh.): Participants in Ghana were generally more likely than other participants to say “believe,” collapsing across question categories, echoing Think Believe 1 and 2
  • Country (Th.): Participants in Thailand no more or less likely than other participants to say “believe,” collapsing across question categories.
  • Country (Ch.): Participants in China were no more or less likely than other participants to say “believe,” collapsing across question categories.
  • Country (Vt.): Participants in Vanuatu were no more or less likely than other participants to say “believe,” collapsing across question categories.
  • Category (religious) x Country (Gh.): The difference in rates of “believe” responses between question categories was smaller in Ghana than in other countries, echoing Think Believe 1 and 2 – in fact, in this study, it appears to have been reduced to zero (more on this below).
  • Category (religious) x Country (Th.): The difference in rates of “believe” responses between question categories was larger in Thailand than in other countries, echoing Think Believe 1 (but not Think Believe 2).
  • Category (religious) x Country (Ch.): The difference in rates of “believe” responses between question categories was no smaller or larger in China than in other countries.
  • Category (religious) x Country (Vt.): The difference in rates of “believe” responses between question categories was no smaller or larger in Vanuatu than in other countries.

Take-away: The predicted effect is evident in this dataset. It appears to be exaggerated in Thailand and diminished in Ghana.

KW Analyses #1a-1e (by country)

Next, I did this same analysis within each country/langauge alone (using the most maximal random effect structure that converged across all countries/languages).

# note: using most maximal common random effects structure
r3.1_us <- lmer(believe ~ super_cat + 
                  (1 + super_cat | thb3_subj) + (1 | question),
                # (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
                # (1 | thb3_subj) + (1 | question),
                # (1 + super_cat | thb3_subj),
                data = d3_long %>% filter(country == "US"))

r3.1_gh <- lmer(believe ~ super_cat + 
                  (1 + super_cat | thb3_subj) + (1 | question),
                # (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
                # (1 | thb3_subj) + (1 | question),
                # (1 + super_cat | thb3_subj),
                data = d3_long %>% filter(country == "Ghana"))

r3.1_th <- lmer(believe ~ super_cat + 
                  (1 + super_cat | thb3_subj) + (1 | question),
                # (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
                # (1 | thb3_subj) + (1 | question),
                # (1 + super_cat | thb3_subj),
                data = d3_long %>% filter(country == "Thailand"))

r3.1_ch <- lmer(believe ~ super_cat + 
                  (1 + super_cat | thb3_subj) + (1 | question),
                # (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
                # (1 | thb3_subj) + (1 | question),
                # (1 + super_cat | thb3_subj),
                data = d3_long %>% filter(country == "China"))

r3.1_vt <- lmer(believe ~ super_cat + 
                  (1 + super_cat | thb3_subj) + (1 | question), # failed to converge
                # (1 + super_cat || thb3_subj) + (1 | question),
                # (1 | thb3_subj) + (1 | question),
                # (1 + super_cat | thb3_subj),
                data = d3_long %>% filter(country == "Vanuatu"))
Country Parameter β Std. Err. df t p
US Intercept 0.58 0.03 8.48 21.28 <0.001 ***
Category (religious) 0.15 0.03 9.02 5.51 <0.001 ***
Ghana Intercept 0.61 0.05 8.89 12.67 <0.001 ***
Category (religious) 0.02 0.05 8.11 0.33 0.748
Thailand Intercept 0.56 0.04 8.69 12.52 <0.001 ***
Category (religious) 0.15 0.04 8.27 3.43 0.009 **
China Intercept 0.55 0.04 8.18 12.54 <0.001 ***
Category (religious) 0.11 0.05 11.64 2.33 0.039 *
Vanuatu Intercept 0.57 0.04 10.46 15.03 <0.001 ***
Category (religious) 0.08 0.04 8.21 2.30 0.050 *

The effects of primary interest are in bold, and the take-away is fairly clear: In every country/language EXCEPT for Ghana/Fante, participants were more likely to say “believe” in “religious” questions than in “fact” questions.

KW Analysis #2

In this analysis, I treated country/language as a random rather than fixed effect (with participants nested within countries). (Note that I had to use a simpler random effects structure in order to get the model to converge.)

r3.2 <- lmer(believe ~ super_cat 
             + (1 + super_cat | country/thb3_subj) + (1 | question), 
             # + (1 + super_cat || country/thb3_subj) + (1 | question), # failed to converge
             # + (1 + super_cat | country/thb3_subj), # failed to converge
             # + (1 | country/thb3_subj) + (1 | question),
             data = d3_long)
Parameter β Std. Err. df t p
Intercept 0.57 0.03 9.15 17.80 <0.001 ***
Category (religious) 0.10 0.04 10.83 2.60 0.025 *

The effect still holds.

Analysis: Based on preregistration

From preregistration:

“Survey 1: We will conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 2 (Statement Type: religion vs. fact) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form the word “believe” (or its respective translation) as the dependent measure. To look for finer-grained differences between different religious and factual statements, we will also conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 5 (Statement Type: Buddhist religious statements vs. Christian religious statements vs. life facts vs. well-known facts vs. esoteric facts) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form of the word “believe” (or its respective translation) as the dependent measure. In all cases where omnibus ANOVAs are significant, we will conduct pairwise analyses comparing each statement type with each other statement type and each site with each other site."

d3_anova <- d3_long %>%
  distinct(thb3_subj, country, super_cat, question, believe) %>%
  group_by(thb3_subj, country, super_cat) %>%
  summarise(prop_believe = mean(believe)) %>%
  ungroup() %>%
  mutate(thb3_subj = factor(thb3_subj))

contrasts(d3_anova$country) <- contrast_country
contrasts(d3_anova$super_cat) <- contrast_super_cat

Prereg Analysis #1

Here is the first preregistered analyis: a 5 (country) x 2 (question category) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants circled “berlieve” as the DV.

r3.4 <- d3_anova %>%
  anova_test(dv = prop_believe, 
             wid = thb3_subj, 
             between = country, 
             within = super_cat)

get_anova_table(r3.4)
ANOVA Table (type III tests)

             Effect DFn DFd       F        p p<.05   ges
1           country   4 323   1.433 2.23e-01       0.009
2         super_cat   1 323 138.564 7.38e-27     * 0.168
3 country:super_cat   4 323   9.107 5.55e-07     * 0.050

This analysis aligns with the regressions above, suggesting that participants’ tendency to circle “believe” varied by question category (super_cat) (though, in this analysis, not by country [country]), and the difference between question category varied across countries/languages (i.e., there was an interaction: country:super_cat).

The preregistration indicated that we’d conduct pairwise follow-up analyses comparing the two question categories and comparing pairs of countires/languages – but, again, I don’t really think we’re interested in comparing pairs of countries/languages, so I’m going to skip that for now. Instead, I’ll compare the two questions categories within each country/language (to explore the significant interaction).

Here we go:

Comparing question categories

r3.5a <- t.test(prop_believe ~ super_cat, paired = T, d3_anova); r3.5a

    Paired t-test

data:  prop_believe by super_cat
t = 11.076, df = 327, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1639753 0.2348052
sample estimates:
mean of the differences 
              0.1993902 

Collapsing across countries/languages, participants circled significantly more “believe” responses for questions in the religious category (20%) than they did for questions in the fact category (NA%).

Comparing question categories within countries/languages

# US
r3.5b_us <- t.test(prop_believe ~ super_cat, paired = T,
                   d3_anova %>% filter(country == "US")); r3.5b_us

    Paired t-test

data:  prop_believe by super_cat
t = 7.4997, df = 56, p-value = 5.168e-10
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2237243 0.3868020
sample estimates:
mean of the differences 
              0.3052632 
# Ghana
r3.5b_gh <- t.test(prop_believe ~ super_cat, paired = T,
                   d3_anova %>% filter(country == "Ghana")); r3.5b_gh

    Paired t-test

data:  prop_believe by super_cat
t = 1.0261, df = 69, p-value = 0.3084
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.02967233  0.09252948
sample estimates:
mean of the differences 
             0.03142857 
# Thailand
r3.5b_th <- t.test(prop_believe ~ super_cat, paired = T,
                   d3_anova %>% filter(country == "Thailand")); r3.5b_th

    Paired t-test

data:  prop_believe by super_cat
t = 8.5045, df = 71, p-value = 1.939e-12
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2317896 0.3737660
sample estimates:
mean of the differences 
              0.3027778 
# China
r3.5b_ch <- t.test(prop_believe ~ super_cat, paired = T,
                   d3_anova %>% filter(country == "China")); r3.5b_ch

    Paired t-test

data:  prop_believe by super_cat
t = 3.8758, df = 48, p-value = 0.0003221
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1080316 0.3409479
sample estimates:
mean of the differences 
              0.2244898 
# Vanuatu
r3.5b_vt <- t.test(prop_believe ~ super_cat, paired = T,
                   d3_anova %>% filter(country == "Vanuatu")); r3.5b_vt

    Paired t-test

data:  prop_believe by super_cat
t = 4.8662, df = 79, p-value = 5.707e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.09603235 0.22896765
sample estimates:
mean of the differences 
                 0.1625 

The difference between question categories was significant in each country/language considered alone, EXCEPT Ghana/Fante.

Analysis: Religion and religiosity

Demographics

First, let’s just look at how people in different countries replied to the relevant questions.

thb3_demo_regp: “Are you a part of any religious group?”

thb3_demo_regp_1_TEXT: “Are you a part of any religious group? If yes, what group?”

thb3_demo_rely: “From 1 to 7, how religious are you? (1 = not religious at all, 7 = extremely religious)”

Seems to have been omitted in Thailand?

thb3_demo_impr: “From 1 to 7, how important to you is your religious practice? (1 = not important at all, 7 = of utmost importance)”

Seems to have been omitted in Thailand?

thb3_demo_wors: “How often do you attend places of worship?”

thb3_demo_bgod: “What best describes your level of belief in God?”

thb3_demo_bbuh: “What best describes your level of belief in Buddha?”

thb3_demo_bosp: “What best describes your level of belief in another spiritual being (other than God or Buddha)?”

thb3_demo_atsn: "What best describes your attitude towards the supernatural?

thb3_demo_imsn: “From 1 to 7, how important to you is your attitude toward the supernatural? (1 = not important at all, 7 = of utmost importance)”

Analyses

Now, let’s look at how responses to our think/believe questions might have varied depending on religiosity/etc. For now, I’ll just focus on a couple of variables that seem to have been answered in reasonable ways.

thb3_demo_rely: “From 1 to 7, how religious are you? (1 = not religious at all, 7 = extremely religious)”

r3.6 <- lmer(believe ~ super_cat * country * thb3_demo_rely_num
             + (1 + super_cat | thb3_subj) + (1 | question),
             data = d3_long %>% 
               filter(country != "Thailand") %>%
               mutate(thb3_demo_rely_num = scale(thb3_demo_rely_num)),
             contrasts = list(country = "contr.sum"))
contrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levels
Parameter β β' β'' Std. Err. df t p
Intercept 0.59 - - 0.03 10.01 17.76 <0.001 ***
Category (religious) 0.08 0.16 0.16 0.03 9.57 2.48 0.033 *
Country (US) -0.02 -0.02 -0.02 0.02 245.01 -0.68 0.499
Country (Ghana) 0.06 0.09 0.09 0.02 245.01 2.44 0.015 *
Country (China) -0.03 -0.04 -0.04 0.03 245.01 -0.85 0.397
How religious are you? -0.01 -0.03 -0.03 0.01 245.01 -0.97 0.331
Category (religious) × Country (US) 0.05 0.07 0.07 0.02 244.99 2.33 0.021 *
Category (religious) × Country (Ghana) -0.06 -0.09 -0.09 0.02 244.99 -2.63 0.009 **
Category (religious) × Country (China) 0.01 0.01 0.01 0.03 244.99 0.28 0.782
Category (religious) × How religious are you? -0.02 -0.04 -0.04 0.01 244.99 -1.43 0.155
Country (US) × How religious are you? 0.00 -0.01 -0.01 0.03 245.01 -0.15 0.884
Country (Ghana) × How religious are you? -0.03 -0.05 -0.05 0.02 245.01 -1.41 0.159
Country (China) × How religious are you? 0.03 0.04 0.04 0.03 245.01 0.98 0.326
Category (religious) × Country (US) × How religious are you? -0.02 -0.03 -0.03 0.02 244.99 -0.85 0.395
Category (religious) × Country (Ghana) × How religious are you? 0.01 0.02 0.02 0.02 244.99 0.51 0.609
Category (religious) × Country (China) × How religious are you? -0.01 -0.01 -0.01 0.03 244.99 -0.30 0.766

This analysis suggests that greater religiosity was NOT associated with an increased distinction between religious and fact questions. (Note that this analysis omits participants from Thailand, who did not answer this question about religiosity.)

thb3_demo_impr: “From 1 to 7, how important to you is your religious practice? (1 = not important at all, 7 = of utmost importance)”

r3.7 <- lmer(believe ~ super_cat * country * thb3_demo_impr_num
             + (1 + super_cat | thb3_subj) + (1 | question),
             data = d3_long %>% 
               filter(country != "Thailand") %>%
               mutate(thb3_demo_impr_num = scale(thb3_demo_impr_num)),
             contrasts = list(country = "contr.sum"))
contrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levelsModel failed to converge with max|grad| = 0.00748372 (tol = 0.002, component 1)contrasts dropped from factor country due to missing levelscontrasts dropped from factor country due to missing levels
Parameter β β' β'' Std. Err. df t p
Intercept 0.58 - - 0.03 10.60 17.25 <0.001 ***
Category (religious) 0.08 0.17 0.17 0.03 9.99 2.55 0.029 *
Country (US) 0.00 -0.01 -0.01 0.02 244.11 -0.20 0.845
Country (Ghana) 0.05 0.08 0.08 0.02 244.11 2.01 0.046 *
Country (China) -0.03 -0.04 -0.04 0.03 244.11 -0.80 0.422
How important is your religious practice? 0.00 -0.01 -0.01 0.02 244.11 -0.22 0.822
Category (religious) × Country (US) 0.04 0.06 0.06 0.02 244.54 1.88 0.062
Category (religious) × Country (Ghana) -0.07 -0.11 -0.11 0.02 244.54 -3.12 0.002 **
Category (religious) × Country (China) 0.03 0.05 0.05 0.03 244.54 1.07 0.285
Category (religious) × How important is your religious practice? 0.00 -0.01 -0.01 0.01 244.54 -0.22 0.823
Country (US) × How important is your religious practice? 0.00 0.00 0.00 0.02 244.11 -0.04 0.968
Country (Ghana) × How important is your religious practice? -0.03 -0.04 -0.04 0.03 244.11 -0.96 0.337
Country (China) × How important is your religious practice? 0.01 0.01 0.01 0.03 244.11 0.29 0.771
Category (religious) × Country (US) × How important is your religious practice? -0.04 -0.05 -0.05 0.02 244.54 -1.63 0.105
Category (religious) × Country (Ghana) × How important is your religious practice? 0.01 0.01 0.01 0.02 244.54 0.34 0.737
Category (religious) × Country (China) × How important is your religious practice? 0.02 0.03 0.03 0.03 244.54 0.57 0.567

This analysis suggests that more importance placed on religious practice was NOT associated with an increased distinction between religious and fact questions. (Note that this analysis omits participants from Thailand, who did not answer this question about religiosity.)

thb3_demowors: “How often do you attend places of worship?”

r3.8 <- lmer(believe ~ super_cat * country * thb3_demo_wors_num
             # + (1 + super_cat | thb3_subj) + (1 | question), # failed to converge
             # + (1 + super_cat || thb3_subj) + (1 | question), # failed to converge
             + (1 | thb3_subj) + (1 | question), # failed to converge
             data = d3_long %>% 
               mutate(thb3_demo_wors_num = scale(thb3_demo_wors_num)))
Parameter β β' β'' Std. Err. df t p
Intercept 0.57 - - 0.04 12.84 16.16 <0.001 ***
Category (religious) 0.10 0.21 0.21 0.03 11.40 2.98 0.012 *
Country (Gh.) 0.04 0.06 0.06 0.03 307.00 1.68 0.094
Country (Th.) -0.01 -0.01 -0.01 0.02 307.00 -0.47 0.642
Country (Ch.) -0.02 -0.02 -0.02 0.06 307.00 -0.26 0.797
Country (Vt.) 0.00 -0.01 -0.01 0.03 307.00 -0.17 0.862
How often do you attend places of worship? -0.01 -0.02 -0.02 0.02 307.00 -0.74 0.459
Category (religious) × Country (Gh.) -0.07 -0.10 -0.10 0.02 2835.00 -3.25 0.001 **
Category (religious) × Country (Th.) 0.04 0.05 0.05 0.02 2835.00 1.95 0.052
Category (religious) × Country (Ch.) 0.02 0.03 0.03 0.06 2835.00 0.40 0.686
Category (religious) × Country (Vt.) -0.01 -0.01 -0.01 0.02 2835.00 -0.38 0.708
Category (religious) × How often do you attend places of worship? -0.01 -0.02 -0.02 0.01 2835.00 -0.90 0.366
Country (Gh.) × How often do you attend places of worship? 0.01 0.01 0.01 0.02 307.00 0.25 0.802
Country (Th.) × How often do you attend places of worship? -0.01 -0.01 -0.01 0.03 307.00 -0.36 0.717
Country (Ch.) × How often do you attend places of worship? 0.01 0.02 0.02 0.04 307.00 0.29 0.774
Country (Vt.) × How often do you attend places of worship? 0.01 0.01 0.01 0.03 307.00 0.37 0.714
Category (religious) × Country (Gh.) × How often do you attend places of worship? -0.01 -0.01 -0.01 0.02 2835.00 -0.40 0.688
Category (religious) × Country (Th.) × How often do you attend places of worship? 0.04 0.05 0.05 0.03 2835.00 1.57 0.116
Category (religious) × Country (Ch.) × How often do you attend places of worship? 0.01 0.01 0.01 0.04 2835.00 0.23 0.821
Category (religious) × Country (Vt.) × How often do you attend places of worship? -0.01 -0.02 -0.02 0.02 2835.00 -0.51 0.609

This analysis suggests that frequency of attendence was NOT associated with an increased distinction between religious and fact questions.

LS0tCnRpdGxlOiAiVGhpbmsgQmVsaWV2ZSAzIChmb3JjZWQgY2hvaWNlLCBjb250cm9sbGVkIGNvbnRlbnQpIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEYsIG1lc3NhZ2UgPSBGKQpgYGAKCkluIHRoaXMgbm90ZWJvb2sgd2UgYW5hbHl6ZSB0aGUgZmlyc3QgInRoaW5rL2JlbGlldmUiIHRhc2ssIGluIHdoaWNoIHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgYSBzZXJpZXMgb2YgY2xvc2V5IG1hdGNoZWQgZmlsbC1pbi10aGUtYmxhbmtzIGJ5IGNob29zaW5nIGJldHdlZW4gdHdvIG9wdGlvbnM6ICJ0aGluayIgYW5kICJiZWxpZXZlLiIKCgpgYGB7cn0Kc291cmNlKCIuL3NjcmlwdHMvZGVwZW5kZW5jaWVzLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9jdXN0b21fZnVucy5SIikKc291cmNlKCIuL3NjcmlwdHMvdmFyX3JlY29kZV9jb250cmFzdC5SIikKYGBgCgpgYGB7cn0KZDNfcmF3IDwtIHJlYWRfeGxzeCgiLi4vZGF0YS9UaGlua0JlbGlldmUzX29yZ2FuaXplZC54bHN4Iiwgc2hlZXQgPSAiVjEgJiBWMiBubyBkdXBlcyIpICU+JQogICMgZW5zdXJlIG5vIGR1cGxpY2F0ZXMKICBncm91cF9ieSh0aGIzX3N1YmopICU+JQogIHRvcF9uKDEsIHRoYjNfYmF0YykgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGhiM19jdHJ5ID0gZmFjdG9yKHRoYjNfY3RyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKQpgYGAKCmBgYHtyfQprZXkzIDwtIHJlYWRfeGxzeCgiLi4vZGF0YS9UaGlua0JlbGlldmUzX29yZ2FuaXplZC54bHN4Iiwgc2hlZXQgPSAxKVsxLF0gJT4lIAogIGRhdGEuZnJhbWUoKSAlPiUKICAjIGdldCByaWQgb2YgZXh0cmEgcXVhbHRyaWNzIHF1ZXN0aW9ucwogIHNlbGVjdCgtYyhTdGFydERhdGU6VXNlckxhbmd1YWdlKSkgJT4lCiAgdCgpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigicXVlc3Rpb24iKSAlPiUKICByZW5hbWUocXVlc3Rpb25fdGV4dCA9ICIuIikgJT4lCiAgIyBnZXQgcmlkIG9mIHdoaXRlIHNwYWNlCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCJcXHMrIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgIyBoYW5kIGNvZGUgcXVlc3Rpb24gY2F0ZWdvcmllcwogIG11dGF0ZShjYXRlZ29yeSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJOQVNBIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgibWVkaWNhbCBzY2hvb2wiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJBc3Ryb25vbWVycyIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoInJlYWRzIGhpc3RvcnkiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJ0cmF2ZWxzIG1hbnkgcGxhY2VzIiwgcXVlc3Rpb25fdGV4dCkgfiAic2NpZW50aWZpYyIsCiAgICBncmVwbCgiU2NpZW50b2xvZ3kiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJHb2Qgc2VudCB0ZW4gcGxhZ3VlcyIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImhvbHkgbWFuIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiTWF5YW4gcmVsaWdpb24iLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJDaHVyY2ggb2YgQ2hyaXN0IFNjaWVudGlzdCIsIHF1ZXN0aW9uX3RleHQpIH4gInJlbGlnaW91cyIsCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JQogIG11dGF0ZShjYXRlZ29yeSA9IGZhY3RvcihjYXRlZ29yeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInJlbGlnaW91cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY2llbnRpZmljIikpLAogICAgICAgICBzdXBlcl9jYXQgPSBjYXNlX3doZW4oZ3JlcGwoInNjaWVudGlmaWMiLCBjYXRlZ29yeSkgfiAic2NpZW50aWZpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgicmVsaWdpb3VzIiwgY2F0ZWdvcnkpIH4gInJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIHN1cGVyX2NhdCA9IGZhY3RvcihzdXBlcl9jYXQsIGxldmVscyA9IGMoInJlbGlnaW91cyIsICJzY2llbnRpZmljIikpKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiAgbXV0YXRlKG9yZGVyID0gYXMubnVtZXJpYyhvcmRlciksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO0IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dF9zaG9ydCA9IGdzdWIoIl4uKnRoYXQgIiwgIi4uLiIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICB2YXJfbmFtZSA9IG5hbWVzKGQzX3Jhd1tuYW1lcyhkM19yYXcpICE9ICJ0aGIzX3ZlcnNpb24iXSkpCmBgYAoKYGBge3J9CmQzIDwtIGQzX3JhdyAlPiUKICBmaWx0ZXIodGhiM19jdHJ5ICVpbiUgbGV2ZWxzX2NvdW50cnkpICU+JQogIG11dGF0ZSh0aGIzX2N0cnkgPSBmYWN0b3IodGhiM19jdHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHRoYjNfZGVtb19zZXggPSBmYWN0b3IodGhiM19kZW1vX3NleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJNYWxlIiwgIkZlbWFsZSIsICJPdGhlciIpKSwgCiAgICAgICAgIHRoYjNfZGVtb19hZ2UgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih0aGIzX2RlbW9fYWdlKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHRoYjNfZGVtb19yZWdwLCB0aGIzX2RlbW9fb2xhbmcpLAogICAgICAgICAgICBmdW5zKGZhY3RvciguLCBsZXZlbHMgPSBjKCJOTyIsICJZRVMiKSkpKSAlPiUKICBtdXRhdGVfYXQodmFycyh0aGIzX2RlbW9fcmVseSwgdGhiM19kZW1vX2ltcHIsIHRoYjNfZGVtb19pbXNuKSwgCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKC4sIGxldmVscyA9IDE6NykpKSAlPiUKICBtdXRhdGUodGhiM19kZW1vX3dvcnMgPSBmYWN0b3IodGhiM19kZW1vX3dvcnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOZXZlciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmNlIGEgeWVhciBvciBsZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSBmZXcgdGltZXMgYSB5ZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25jZSBvciB0d2ljZSBhIG1vbnRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXZlcnkgd2VlayBvciBtb3JlIG9mdGVuIikpLAogICAgICAgICB0aGIzX2RlbW9fYmdvZCA9IGZhY3Rvcih0aGIzX2RlbW9fYmdvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm90IGF0IGFsbCBiZWxpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzbGlnaHRseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgbW9kZXJhdGVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc3Ryb25nbHkiKSksCiAgICAgICAgIHRoYjNfZGVtb19iYnVoID0gZmFjdG9yKHRoYjNfZGVtb19iYnVoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOb3QgYXQgYWxsIGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHNsaWdodGx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBtb2RlcmF0ZWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzdHJvbmdseSIpKSwKICAgICAgICAgdGhiM19kZW1vX2Jvc3AgPSBmYWN0b3IodGhiM19kZW1vX2Jvc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5vdCBhdCBhbGwgYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc2xpZ2h0bHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIG1vZGVyYXRlbHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHN0cm9uZ2x5IikpLAogICAgICAgICB0aGIzX2RlbW9fYXRzbiA9IGZhY3Rvcih0aGIzX2RlbW9fYXRzbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBzdXBlcm5hdHVyYWwgZm9yY2VzIG9yIGJlaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlIGNhbm5vdCBrbm93IGlmIHRoZXJlIGFyZSBzdXBlcm5hdHVyYWwgZm9yY2VzIGFuZCBiZWluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGVyZSBtaWdodCBiZSBzdXBlcm5hdHVyYWwgZm9yY2VzIGFuZCBiZWluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXBlcm5hdHVyYWwgZm9yY2VzIGFuZCBiZWluZ3MgZXhpc3QgYnV0IHdlIGNhbm5vdCBrbm93IHdoYXQgdGhleSBhcmUgbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZXJlIGRlZmluaXRlbHkgYXJlIHN1cGVybmF0dXJhbCBmb3JjZXMgYW5kIGJlaW5ncyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnModGhiM19kZW1vX3JlbHksIHRoYjNfZGVtb19pbXByLCB0aGIzX2RlbW9fd29ycywgdGhiM19kZW1vX2Jnb2QsIAogICAgICAgICAgICAgICAgIHRoYjNfZGVtb19iYnVoLCB0aGIzX2RlbW9fYm9zcCwgdGhiM19kZW1vX2F0c24sIHRoYjNfZGVtb19pbXNuKSwgCiAgICAgICAgICAgIGZ1bnMobnVtID0gYXMubnVtZXJpYyguKSAtIDEpKSAlPiUKICBtdXRhdGUocmVsaWdpb24gPSBjYXNlX3doZW4oCiAgICB0aGIzX2RlbW9fcmVncF8xX1RFWFQgJWluJSBjKCJBbmdsaWNhbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQW5nbGljYW4vU0RBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFvRyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBLk8uRyB5b3V0aCBncm91cCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQW51Y2hvbiBDaHVyY2giLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFPRzogWW91dGgiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFwb3N0b2xpYyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmlibGUgQ2h1cmNoICYgQ01DIENodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCaWJsZSBjaHVyY2ggYW5kIFByZXNieXRlcmlhbiBjaHVyY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxhY2sgQ2FtcHVzIE1pbmlzdHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbXB1cyBjcnVzYWRlIGZvciBDaHJpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2F0aG9saWMgQ2hyaXN0aWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhdGhvbGljIENodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZWxsIGdyb3VwIEFudWNob24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0YsIFlvdXRoIE1pbmlzdHJ5IGV0Yy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvcnVzIHlvdXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocmlzdGlhbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuIGhvdXNlIGNodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpYW4gLSBNZXRob2Rpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuIC0gUGVudGVjb3N0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpYW4gLSBSb21hbiBDYXRob2xpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpYW4gKENhdGhvbGljKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuIChQZW50ZWNvc3QpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocmlzdGlhbiAoUG90dGVycyBoYW5kKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpYW4gKFJvbWFuKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuIGNodXJjaCBpbiBTb3AgVGlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocmlzdGlhbiBGZWxsb3dzaGlwIEdyb3VwIChDRikiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocmlzdGlhbml0eSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuaXR5IChvdmVyY29tZXJzIGFuZCBDb25ncmVzcyBJbnQuIENodXJjaCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hyaXN0aWFuaXR5IChSb21hbiBDYXRob2xpYykiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocmlzdGlhbml0eSAoUm9tYW4pIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJpc3RpYW5zIG9uIENhbXB1cyBTSlNVIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaHVyY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2h1cmNoIFlvdXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNodXJjaCBZb3V0aCBhbmQgUmVsaWdpb3VzIFNpbmdpbmcgR3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2h1cmNoIHlvdXRocyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2h1cmNoLCBZb3V0aCBmZWxsb3dzaGlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNodXJjaDogU3VuZGF5IFNjaG9vbCArIFNlcnZpY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW11bml0eSBQcmF5ZXIgZ3JvdXAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW11bml0eSBQcmF5ZXIgR3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRC5SLkUuQS5NIENhbXB1cyBNaW5pc3RyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbWFsdXMgcmVsaWdpb3VzIGdyb3VwLCBzdHVkZW50IGxpZmUgYXNzb2NpYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXBhdXRvIGNodXJjaCAoUG9ydCBWaWxhKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmF0aGVyJ3MgSG91c2UiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhdGhlcnMgaG91c2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmVsbG93c2hpcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmllbmQgZ3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2xvcmlvdXMgY2h1cmNoIHBlb3BsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHbG91cmlzZSBDaHVyY2ggZ29pbmcgYW5kIHByYXkgZm9yIHNpY2sgcGVvcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdvIHRvIENhdGhvbGljIGNodXJjaCBldmVyeSBTdW5kYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR28gdG8gY2h1cmNoIGV2ZXJ5IFN1bmRheSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHRvIGNodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbyB0byBjaHVyY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgb2YgWW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSG91c2UgY2h1cmNoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIb3VzZSBjaHVyY2ggb2YgQ2hyaXN0aWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkgYW0gcGFydCBvciBtZW1iZXIgb2YgUG90b3Jva2kgeW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSUNPTUIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkplaG92YSdzIFdpdG5lc3NlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKZWhvdmFoJ3MgV2l0bmVzc2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpveSB3aXRoIE11bmljaXBhbGl0eSBncm91cCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSnVzdCBZb3V0aCdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpZHMgcHJheWVyIHdhcnJpb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS29yZWFuIENhbXB1cyBDcnVzYWRlIGZvciBDaHJpc3Q/IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktZQiAtIEtub3dpbmcgWW91ciBCaWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMRFMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTERTIE1vcm1vbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZWFkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGVhZGVyIG9mIHRoZSBZb3V0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaXZpbmcgd2F0ZXIsIEhlcmFtIHByYWlzZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGlzdGVuIHRvIHNlcm1vbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCBjaHVyY2hlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWUgS2EgQm9vIENodXJjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZW1iZXIgb2YgdGhlIHlvdXRoLCBjaGlsZHJlbiBjbGFzcyB0ZWFjaGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NvbmV0dGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vcm1vbiBoZWxwaW5nIGhhbmRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5UTSBZb3V0aCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25seSBQLlIuQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXN0b3IgYW5kIEFwb3N0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0aGZpbmRlciwgQW1iYXNzYWRvciwgWW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0aHdheSBNaW5pc3RyeSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJhaXNlICYgd29yc2hpcCwgdmlzaXRhdGlvbiwgY29tYmluZSBzZXJ2aWNlLCB5b3V0aCwgY2hvaXIgcHJhY3RpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJheSB3YXJyaW9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByYXlpbmcgU3VuZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXNiZXJ0ZW50IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVzYnl0ZXJpYW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXNieXRlcmlhbiBDaHVyY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHVsc2UiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJvbWFuIENhdGhvbGljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJvbWFuIENhdGhvbGljICh0ZWNobmljYWxseSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NyaXB0dXJlIFVuaW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREEgWW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2luZ2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaXlvbiBHcm91cC8gbGlrZSBjYXJlZ3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3R1ZGVudCBsaWZlIChVU1ApIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdW5kYXkgc2Nob29sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1bmRheSBzY2hvb2wsIHlvdXRoIGV0YyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdW5kYXkgU2Nob29sLCBCaWJsZSBzdHVkeSBhbmQgWW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VuZGF5IFNjaG9vbCwgWW91dGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVhY2hlciBmb3IgU2FiYnRoIFNjaG9vbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJkIENob2lyLCBFbGRlcidzIHF1b3JlbSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2F0Y2huaWdodCBzZXJ2aWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGNobmlnaHQgc2VydmljZSBvcmRpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldvcmRzIENocmlzdGlhbiBmZWxsb3dzaGlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlllcyBrYXdhcmlraSBTLkQuQSBDaHVyY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzLCBQcmF5ZXIgZ3JvdXAsIENodXJjaCBJbnN0cnVtZW50YWxpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMhIENodXJjaCB5b3V0aCAoZHJ1bWVyKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZZXMhIC0geW91dGggZ3JvdXAvbWluaXN0cnkgLWNoaWxkcmVuIG1pbmlzdHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nIHNpbmdsZSBhZHVsdHMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInlvdXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCBBY3Rpdml0aWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRoIEZlbGxvd3NoaXAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRoIGdyb3VwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCBHcm91cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCBtZW1iZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRoIE1lbWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCBNZW1iZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRoLCBDaHVyY2ggQmFuZCBhbmQgV29tZW4ncyBNaW5pc3RyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCwgU3VuZGF5IFNjaG9vbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aCwgU3VuZGF5IHNjaG9vbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91dGgsIFN1bmRheSBTY2hvb2wsIGV0Yy4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3V0aC9NZW4ncyBGZWxsb3dzaGlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXRocyAoUG9ydCBWaWxhKSBBbmdsaWNhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoWW91dGgpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInlvdXRocyIpIH4gIkNocmlzdGlhbiIsCiAgICB0aGIzX2RlbW9fcmVncF8xX1RFWFQgJWluJSBjKCJCdWRkaGlzbSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVkZGhpc20gY2x1YiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWRkaGlzdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVkZGhpc3QgY2FtcGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWRkaGlzdCBDYW1waW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZGRoaXN0IENsdWIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVkZGhpc3QgU3VuZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZGRoaXN0LCBtYWtlIG1lcml0IGluIHRlbXBsZSwgZ28gdG8gdGVtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoYW50IC8gTWVyaXQgLyBMaXN0ZW5pbmcgdG8gQnVkZGhpc3QncyB0ZWFjaGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWNlYm9vayB2aWxsYWdlIHRlbXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHbyB0byBuZWlnaGJvciB0ZW1wbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdvIHRvIHRlbXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHb2luZyB0byB0ZW1wbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkd1YW4gWWluIENpdHRhIChjcmVhdGVkIGJ5IGFuIEF1c3RyYWxpYW4gQ2hpbmVzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob2x5IGRheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIb2x5IGRheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIG1lcml0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIG1lcml0IGluIGhvbHkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2UgbWVyaXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaXRhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZWRpdGF0aW9uIGNhbXBpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyaXQgZ2l2ZSBmb29kIHRvIG1vbmsiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lcml0LCBnb2luZyB0byB0ZW1wbGUgaW4gaG9seSBkYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyaXQgZ3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9uayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gbWFrZSBtZXJpdCwgbGlzdGVuaW5nIHRvIEJ1ZGRoaXN0IGlzIHRlYWNoaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHRlbXBsZSIpIH4gIkJ1ZGRoaXN0IiwKICAgIGlzLm5hKHRoYjNfZGVtb19yZWdwXzFfVEVYVCkgfAogICAgICB0aGIzX2RlbW9fcmVncF8xX1RFWFQgJWluJSBjKCJtZGF0YSIsICJNaXNzaW5nIERhdGEiLCAibm90IHRyYW5zIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCB0cmFucyIsICJub25lIikgfiBOQV9jaGFyYWN0ZXJfLAogICAgVFJVRSB+ICJPdGhlciIKICApKQoKY29udHJhc3RzKGQzJHRoYjNfY3RyeSkgPSBjb250cmFzdF9jb3VudHJ5CmBgYAoKYGBge3J9CmQzX2xvbmcgPC0gZDMgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgdGhiM19hbGllbnMubmFzYTp0aGIzX2RvZy53ZWxsd2F0ZXIpICU+JQogIG11dGF0ZSh0aGluayA9IGlmZWxzZShncmVwbCgidGhpbmsiLCByZXNwb25zZSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJ0aG91Z2h0IiwgcmVzcG9uc2UpLCBULCBGKSwKICAgICAgICAgYmVsaWV2ZSA9IGlmZWxzZShncmVwbCgiYmVsaWUiLCByZXNwb25zZSksIFQsIEYpLAogICAgICAgICByZXNwb25zZV9jYXQgPSBjYXNlX3doZW4oYmVsaWV2ZSA9PSBUIH4gImJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmsgPT0gVCB+ICJ0aGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIHJlc3BvbnNlX2NhdCA9IGZhY3RvcihyZXNwb25zZV9jYXQsIGxldmVscyA9IGMoInRoaW5rIiwgImJlbGlldmUiKSkpICU+JQogIGxlZnRfam9pbihrZXkzICU+JSBzZWxlY3QoLXF1ZXN0aW9uKSAlPiUgcmVuYW1lKHF1ZXN0aW9uID0gdmFyX25hbWUpKQoKY29udHJhc3RzKGQzX2xvbmckdGhiM19jdHJ5KSA9IGNvbnRyYXN0X2NvdW50cnkKIyBjb250cmFzdHMoZDNfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9jYXRlZ29yeQpjb250cmFzdHMoZDNfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9zdXBlcl9jYXQgIyBlZGl0IGlmIG5lZWRlZCBsYXRlcgpjb250cmFzdHMoZDNfbG9uZyRzdXBlcl9jYXQpID0gY29udHJhc3Rfc3VwZXJfY2F0CmBgYAoKYGBge3J9CiMgaW1wbGVtZW50IGV4Y2x1c2lvbiBjcml0ZXJpYSBhbmQgcmVuYW1lIGNvdW50cnkgdmFyaWFibGUKZDMgPC0gZDMgJT4lIAogIGZpbHRlcih0aGIzX29yZHIgPT0gIlllcyIsIHRoYjNfYXR0biA9PSAiUGFzcyIpICU+JQogIHJlbmFtZShjb3VudHJ5ID0gdGhiM19jdHJ5KQoKZDNfbG9uZyA8LSBkM19sb25nICU+JSAKICBmaWx0ZXIodGhiM19vcmRyID09ICJZZXMiLCB0aGIzX2F0dG4gPT0gIlBhc3MiKSAlPiUKICByZW5hbWUoY291bnRyeSA9IHRoYjNfY3RyeSkKYGBgCgoKIyBPdmVydmlldwoKRnJvbSB0aGUgcHJlcmVnaXN0cmF0aW9uIChbbGlua10oaHR0cHM6Ly9hc3ByZWRpY3RlZC5vcmcvcDZpeTMucGRmKSk6Cgo+ICJPdXIgb3ZlcmFyY2hpbmcgaHlwb3RoZXNpcyBmb3IgdGhlIHByZXNlbnQgc3R1ZHkgaXMgdGhhdCBbLi4uXSBvdGhlciBsYW5ndWFnZXMgd2lsbCBoYXZlIGFuIGVwaXN0ZW1pYyB2ZXJiIHRoYXQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdXNlZCBmb3IgcmVsaWdpb3VzIGF0dGl0dWRlIHJlcG9ydHMgKHNpbWlsYXIgdG8gRW5nbGlzaCDigJxiZWxpZXZl4oCdKSBhbmQgYSBkaWZmZXJlbnQgZXBpc3RlbWljIHZlcmIgdGhhdCBpcyBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGZvciBtYXR0ZXItb2YtZmFjdCBhdHRpdHVkZSByZXBvcnRzIChzaW1pbGFyIHRvIEVuZ2xpc2gg4oCcdGhpbmvigJ0pLiAKPiAKPiBGb3IgdGhpcyBzdHVkeSwgd2UgYXJlIGV4YW1pbmluZyBmaXZlIGxhbmd1YWdlcyBpbiBmaXZlIHJlZ2lvbnMgb2YgaW50ZXJlc3Q6IChpKSBNYW5kYXJpbiBpbiBDaGluYTsgKGlpKSBUaGFpIGluIFRoYWlsYW5kOyAoaWlpKSBCaXNsYW1hIChhbiBFbmdsaXNoLWJhc2VkIGNyZW9sZQpsYW5ndWFnZSkgb24gdGhlIE1lbGFuZXNpYW4gSXNsYW5kIG9mIFZhbnVhdHU7IChpdikgRmFudGUgaW4gR2hhbmE7IGFuZCAodikgQW1lcmljYW4gRW5nbGlzaCBpbiB0aGUgQmF5IEFyZWEsIENhbGlmb3JuaWEuIAo+IAo+IFdlIHRodXMgaGF2ZSBmaXZlIG1vcmUgc3BlY2lmaWMgc3ViLWh5cG90aGVzZXMuIEZvciBlYWNoIG9mIHRoZSBmaXJzdCBmb3VyIGxhbmd1YWdlcyAvIHJlZ2lvbnMgb2YgaW50ZXJlc3QsIHdlIGh5cG90aGVzaXplIHRoYXQgYSBzZXQgb2Ygd29yZHMgb3IgcGhyYXNlcyBleGlzdHMgd2hvc2UgdXNhZ2UgcGFyYWxsZWxzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNhZ2Ugb2Yg4oCcdGhpbmvigJ0gYW5kIOKAnGJlbGlldmXigJ0gaW4gQW1lcmljYW4gRW5nbGlzaCwgd2l0aCBvbmUgd29yZCBvciBwaHJhc2UgKHRoZSDigJx0aGlua+KAnSBhbmFsb2d1ZSkgYmVpbmcgdXNlZCBmb3IgbW9yZSBtYXR0ZXItb2YtZmFjdCBhdHRpdHVkZSByZXBvcnRzIGFuZCB0aGUgb3RoZXIgKHRoZSDigJxiZWxpZXZl4oCdIGFuYWxvZ3VlKSBiZWluZyBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGZvciByZWxpZ2lvdXMgYXR0aXR1ZGUgcmVwb3J0cy4gVGhhdCBnaXZlcyB1cyBvdXIgZmlyc3QgZm91ciBzdWItaHlwb3RoZXNlczogdGhhdCBNYW5kYXJpbiwgVGhhaSwgQmlzbGFtYSBhbmQgRmFudGUgc3BlYWtlcnMgd2lsbCBlYWNoIHVzZSB0d28gZGlmZmVyZW50IHdvcmRzIGluIGEgbWFubmVyIHBhcmFsbGVsIHRvIHRoZSB1c2Ugb2YK4oCcdGhpbmvigJ0gYW5kIOKAnGJlbGlldmXigJ0gaW4gYW4gQW1lcmljYW4gRW5nbGlzaCBzZXR0aW5nIGFzIGlkZW50aWZpZWQgYnkgSGVpcGhldHosIExhbmRlcnMsIGFuZCBWYW4gTGVldXdlbi4gT3VyIGZpZnRoIHN1Yi1oeXBvdGhlc2lzIGlzIHRoYXQgdGhlIEJheSBBcmVhIHBvcnRpb24gb2YgdGhlIHN0dWR5IHdpbGwgcmVwbGljYXRlIHRoZSByZXN1bHRzIG9mIHRoZSBlYXJsaWVyIHN0dWR5IG9mIEhlaXBoZXR6LCBMYW5kZXJzLCBhbmQgVmFuIExlZXV3ZW4uIgoKCjxwIHN0eWxlPSJjb2xvcjpkYXJrcmVkIj4qKktXIEVYRUNVVElWRSBTVU1NQVJZICgyMDIwLTAxLTIwKTogV2UgcmVwbGljYXRlZCB0aGUgb3JpZ2luYWwgZmluZGluZyBpbiB0aGUgVVMgKGFuZCB0aGUgZmluZGluZ3Mgb2YgVGhpbmsgQmVsaWV2ZSAxIGFuZCAyKTogcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlIiBmb3Igc2VudGVuY2VzIGluIHJlbGlnaW91cyBjb250ZXh0cyB0aGFuIHNlbnRlbmNlcyBpbiBzY2llbnRpZmljIGNvbnRleHRzLiBXZSBmb3VuZCB0aGUgc2FtZSBwYXR0ZXJuIGluIGZvdXIgb3V0IG9mIHRoZSBmaXZlIGNvdW50cmllcy9sYW5nYXVnZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIEdoYW5hLioqPC9wPgoKPHAgc3R5bGU9ImNvbG9yOmRhcmtyZWQiPioqQXMgaW4gcHJldmlvdXMgc3R1ZGllcywgdGhlIHBhdHRlcm4gd2FzIHdlYWtlciBpbiBHaGFuYS9GYW50ZSB0aGFuIGluIG90aGVyIGNvdW50cmllcy9sYW5ndWFnZXMgLS0gaW5kZWVkLCBpdCB3YXMgbm90IHByZXNlbnQuIEFzIGluIFRoaW5rIEJlbGlldmUgMSAoYnV0IG5vdCBUaGluayBCZWxpZXZlIDIpLCB0aGUgcGF0dGVybiB3YXMgc3Ryb25nZXIgaW4gVGhhaWxhbmQvVGhhaS4qKjwvcD4KCgojIFNhbXBsZXMKCkJlZm9yZSB3ZSBiZWdpbiwgaXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHdlIGhhZCB1bmVxdWFsIHNhbXBsZSBzaXplcyBieSBjb3VudHJ5OgoKYGBge3J9CmQzX3JhdyAlPiUgY291bnQodGhiM19jdHJ5KQpgYGAKCkhvd2V2ZXIsIGByIGQzX3JhdyAlPiUgZmlsdGVyKHRoYjNfb3JkciA9PSAiTm8iKSAlPiUgY291bnQoKSAlPiUgYXMubnVtZXJpYygpYCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIHRoaXMgdGFzayBhZnRlciBjb21wbGV0aW5nIG90aGVyIHN1cnZleXMsIGFuZCBhbiBhZGRpdGlvbmFsIGByIGQzX3JhdyAlPiUgZmlsdGVyKHRoYjNfb3JkciA9PSAiWWVzIiwgdGhiM19hdHRuID09ICJGYWlsIikgJT4lIGNvdW50KCkgJT4lIGFzLm51bWVyaWMoKWAgZmFpbGVkIHRoZSBhdHRlbnRpb24gY2hlY2suIEluIHRoZSBmb2xsb3dpbmcgYW5hbHlzZXMgSSB3aWxsIGV4Y2x1ZGUgdGhlc2UgcGFydGljaXBhbnRzLCBsZWF2aW5nIHVzIHdpdGggdGhlIGZvbGxvd2luZyBzYW1wbGVzOgoKYGBge3J9CmQzICU+JSBjb3VudChjb3VudHJ5KQpgYGAKCmBgYHtyfQpzYW1wbGVfc2l6ZV9kMyA8LSBkMyAlPiUgCiAgY291bnQoY291bnRyeSkgJT4lIAogIGRhdGEuZnJhbWUoKSAlPiUKICBtdXRhdGUoY291bnRyeV9uID0gcGFzdGUwKGNvdW50cnksICIgKG49IiwgbiwgIikiKSwKICAgICAgICAgY291bnRyeV9uID0gcmVvcmRlcihjb3VudHJ5X24sIGFzLm51bWVyaWMoY291bnRyeSkpKQpgYGAKCgojIFBsb3RzCgpXZSdsbCBiZWdpbiBieSBwbG90dGluZyByZXNwb25zZXMgb2YgInRoaW5rIiAocmVkKSB2cy4gImJlbGlldmUiICh0dXJxdW9pc2UpIHRvIGdldCBhbiBvdmVyYWxsIHNlbnNlIG9mIGFueSBwYXR0ZXJucyBpbiB0aGUgZGF0YS4KCiMjIEJ5IGNhdGVnb3J5CgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KZDNfbG9uZyAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDMpICU+JQogIGdncGxvdChhZXMoeCA9IGNhdGVnb3J5LCAKICAgICAgICAgICAgICMgcHV0IE5BcyBvbiB0b3Agb2YgYmFyCiAgICAgICAgICAgICBmaWxsID0gZmFjdG9yKHJlc3BvbnNlX2NhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhOQSwgInRoaW5rIiwgImJlbGlldmUiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGUgPSBOVUxMKSkpICsKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5X24sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh4ID0gImNhdGVnb3J5IiwgeSA9ICJwcm9wb3J0aW9uIiwgZmlsbCA9ICJyZXNwb25zZSIpCmBgYAoKIyMgQnkgcXVlc3Rpb24KCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC43fQpkM19sb25nICU+JQogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihzdHJfd3JhcChxdWVzdGlvbl90ZXh0X3Nob3J0LCA0MCksIG9yZGVyKSwgCiAgICAgICAgICAgICAjIHB1dCBOQXMgb24gdG9wIG9mIGJhcgogICAgICAgICAgICAgZmlsbCA9IGZhY3RvcihyZXNwb25zZV9jYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoTkEsICJ0aGluayIsICJiZWxpZXZlIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gTlVMTCkpKSArCiAgZmFjZXRfZ3JpZChjb3VudHJ5X24gfiBjYXRlZ29yeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhbHBoYSA9IDAuNywgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgcGxvdC5tYXJnaW4gPSAodW5pdChjKDAuMiwgMC4yLCAwLjIsIDEuOCksICJjbSIpKSkgKwogIGxhYnMoeCA9ICJjYXRlZ29yeSIsIHkgPSAicHJvcG9ydGlvbiIsIGZpbGwgPSAicmVzcG9uc2UiKQpgYGAKCgojIEFuYWx5c2lzOiBLVyB3aXRob3V0IGxvb2tpbmcgYXQgcHJlcmVnaXN0cmF0aW9uCgpIZXJlJ3MgaG93IEkgYW5hbHl6ZWQgdGhlIGRhdGEgYmVmb3JlIGxvb2tpbmcgYXQgdGhlIHByZXJlZ2lzdHJhdGlvbi4gSSB0aGluayB0aGVzZSBhbmFseXNlcyBhcmUgdmFsdWFibGUgYmVjYXVzZSB0aGV5J3JlIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMgLS0gbm8gbmVlZCBmb3IgZm9sbG93LXVwIHRlc3RzIC0tIGFuZCB0aGV5IGRpcmVjdGx5IHRlc3QgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIGVmZmVjdCBvZiBpbnRlcmVzdCB2YXJpZXMgYWNyb3NzIGNvdW50cmllcy9sYW5nYXVnZXMuCgpUZWNobmljYWwgbm90ZTogVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UsIGFsbCBvZiB0aGVzZSBhbmFseXNlcyB1c2UgImVmZmVjdCBjb2RpbmciIGZvciBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgKGUuZy4sIGNvdW50cnksIGNhdGVnb3J5IG9mIHF1ZXN0aW9uKSAtLSBtZWFuaW5nIHRoYXQgZWFjaCBjb3VudHJ5L2xhbmdhdWdlIGlzIGNvbXBhcmVkIHRvIHRoZSAiZ3JhbmQgbWVhbiIgY29sbGFwc2luZyBhY3Jvc3MgYWxsIGNvdW50cmllcy9sYW5ndWFnZXMuIEJlY2F1c2Ugb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlzc3VlcywgZWFjaCBhbmFseXNpcyBvbmx5IGNvbXBhcmVzIDQgb2YgdGhlIDUgY291bnRyaWVzIHRvIHRoZSBncmFuZCBtZWFuIC0tIGJ5IGRlZmF1bHQsIEkndmUgbGVmdCBvdXQgdGhlIGNvbXBhcmlzb24gb2YgdGhlIFVTL0VuZ2xpc2ggdG8gdGhlIGdyYW5kIG1lYW4sIGJ1dCBzdGF0cyBmb3IgdGhhdCBjb21wYXJpc29uIGNvdWxkIGVhc2lseSBiZSBjYWxjdWxhdGVkIChpZiB3ZSBsZWZ0IG91dCBhbm90aGVyIGNvdW50cnkvbGFuZ3VhZ2UgaW5zdGVhZCkuIFRoaXMgaXMganVzdCB0byBzYXkgdGhhdCB5b3Ugd29uJ3Qgc2VlIHN0YXRlbWVudHMgbGlrZSAiVGhlIGVmZmVjdCB3YXMgZXhhZ2dlcmF0ZWQgaW4gdGhlIFVTIHJlbGF0aXZlIHRvIG90aGVyIGNvdW50cmllcywiIGFsdGhvdWdoIHRoZXkgbWlnaHQgYmUgdHJ1ZS4KCiMjIEtXIEFuYWx5c2lzICMxCgpGaXJzdCwgSSB1c2VkIGEgbWl4ZWQgZWZmZWN0cyBsb2dpc3RpYyByZWdyZXNzaW9uIHByZWRpY3RpbmcgaG93IGxpa2VseSBhIHBhcnRpY2lwYW50IHdhcyB0byBjaXJjbGUgImJlbGlldmUiIGJhc2VkIG9uIHRoZSBzdXBlcm9yZGluYXRlIGNhdGVnb3J5IG9mIHRoZSBxdWVzdGlvbiAoInJlbGlnaW91cyIgcXVlc3Rpb25zIG9yICJmYWN0IiBxdWVzdGlvbnMpLCB0aGUgY291bnRyeSB0aGV5IHdlcmUgaW4vbGFuZ3VhZ2UgdGhleSB3ZXJlIHVzaW5nIChVUy9FbmdsaXNoLCBHaGFuYS9GYW50ZSwgVGhhaWxhbmQvVGhhaSwgQ2hpbmEvTWFuZGFyaW4sIG9yIFZhbnVhdHUvQmlzbGFtYSksIGFuZCBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZW0sIHdpdGggYSBtYXhpbWFsIHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZSAocmFuZG9tIGludGVycGNlcHRzIGFuZCBzbG9wZXMgYnkgc3ViamVjdCwgYW5kIHJhbmRvbSBpbnRlcmNlcHRzIGJ5IHF1ZXN0aW9uKS4gVGhpcyBhbmFseXNpcyBnaXZlcyBtZSBhIHNlbnNlIG9mICgxKSBXaGV0aGVyIHBhcnRpY2lwYW50cyB3ZXJlIG1vcmUgbGlrZWx5IHRvIGNpcmNsZSAiYmVsaWV2ZSIgZm9yIHJlbGlnaW91cyBxdWVzdGlvbnMgdGhhbiBmYWN0IHF1ZXN0aW9ucywgYW5kIHdoZXRoZXIgdGhpcyB0ZW5kZW5jeSB2YXJpZWQgYnkgY291bnRyeS9sYW5ndWFnZSwgY29udHJvbGxpbmcgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIG92ZXJhbGwgcmF0ZXMgb2YgY2lyY2xpbmcgImJlbGlldmUiIG1pZ2h0IHZhcnkgYnkgY291bnRyeS9sYW5ndWFnZSAoYW5kIGFjY291bnRpbmcgZm9yIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgYW5kIGRpZmZlcmVuY2VzIGFjcm9zcyBpbmRpdmlkdWFsIHF1ZXN0aW9ucykuCgpgYGB7ciwgZWNobyA9IFR9CnIzLjEgPC0gbG1lcihiZWxpZXZlIH4gc3VwZXJfY2F0ICogY291bnRyeSAKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIzX3N1YmopLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgIyArICgxICsgc3VwZXJfY2F0IHx8IHRoYjNfc3ViaiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICArICgxIHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQzX2xvbmcpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjMuMSwgc3RkX2JldGEgPSBUKSAlPiUgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMiwgNzoxMCkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyZWd0YWJfcmFuX2Z1bihyMy4xLCBzdWJqX3ZhciA9ICJ0aGIzX3N1YmoiKSAlPiUgcmVndGFiX3N0eWxlX2Z1bigpCmBgYAoKVGhlIGVmZmVjdHMgb2YgcHJpbWFyeSBpbnRlcmVzdCBhcmUgaW4gYm9sZDoKCi0gKipDYXRlZ29yeSAocmVsaWdpb3VzKSoqOiBDb2xsYXBzaW5nIGFjcm9zcyBjb3VudHJpZXMvbGFuZ3VhZ2VzLCBwYXJ0aWNpcGFudHMgd2VyZSBpbmRlZWQgbW9yZSBsaWtlbHkgdG8gc2F5ICJiZWxpZXZlIiBmb3IgInJlbGlnaW91cyIgcXVlc3Rpb25zLCBlY2hvaW5nIFRoaW5rIEJlbGlldmUgMSBhbmQgMi4gCi0gQ291bnRyeSAoR2guKTogUGFydGljaXBhbnRzIGluIEdoYW5hIHdlcmUgZ2VuZXJhbGx5IG1vcmUgbGlrZWx5IHRoYW4gb3RoZXIgcGFydGljaXBhbnRzIHRvIHNheSAiYmVsaWV2ZSwiIGNvbGxhcHNpbmcgYWNyb3NzIHF1ZXN0aW9uIGNhdGVnb3JpZXMsIGVjaG9pbmcgVGhpbmsgQmVsaWV2ZSAxIGFuZCAyCi0gQ291bnRyeSAoVGguKTogUGFydGljaXBhbnRzIGluIFRoYWlsYW5kIG5vIG1vcmUgb3IgbGVzcyBsaWtlbHkgdGhhbiBvdGhlciBwYXJ0aWNpcGFudHMgdG8gc2F5ICJiZWxpZXZlLCIgY29sbGFwc2luZyBhY3Jvc3MgcXVlc3Rpb24gY2F0ZWdvcmllcy4KLSBDb3VudHJ5IChDaC4pOiBQYXJ0aWNpcGFudHMgaW4gQ2hpbmEgd2VyZSBubyBtb3JlIG9yIGxlc3MgbGlrZWx5IHRoYW4gb3RoZXIgcGFydGljaXBhbnRzIHRvIHNheSAiYmVsaWV2ZSwiIGNvbGxhcHNpbmcgYWNyb3NzIHF1ZXN0aW9uIGNhdGVnb3JpZXMuCi0gQ291bnRyeSAoVnQuKTogUGFydGljaXBhbnRzIGluIFZhbnVhdHUgd2VyZSBubyBtb3JlIG9yIGxlc3MgbGlrZWx5IHRoYW4gb3RoZXIgcGFydGljaXBhbnRzIHRvIHNheSAiYmVsaWV2ZSwiIGNvbGxhcHNpbmcgYWNyb3NzIHF1ZXN0aW9uIGNhdGVnb3JpZXMuCi0gKipDYXRlZ29yeSAocmVsaWdpb3VzKSB4IENvdW50cnkgKEdoLikqKjogVGhlIGRpZmZlcmVuY2UgaW4gcmF0ZXMgb2YgImJlbGlldmUiIHJlc3BvbnNlcyBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNtYWxsZXIgaW4gR2hhbmEgdGhhbiBpbiBvdGhlciBjb3VudHJpZXMsIGVjaG9pbmcgVGhpbmsgQmVsaWV2ZSAxIGFuZCAyIC0tIGluIGZhY3QsIGluIHRoaXMgc3R1ZHksIGl0IGFwcGVhcnMgdG8gaGF2ZSBiZWVuIHJlZHVjZWQgdG8gemVybyAobW9yZSBvbiB0aGlzIGJlbG93KS4KLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpIHggQ291bnRyeSAoVGguKSoqOiBUaGUgZGlmZmVyZW5jZSBpbiByYXRlcyBvZiAiYmVsaWV2ZSIgcmVzcG9uc2VzIGJldHdlZW4gcXVlc3Rpb24gY2F0ZWdvcmllcyB3YXMgbGFyZ2VyIGluIFRoYWlsYW5kIHRoYW4gaW4gb3RoZXIgY291bnRyaWVzLCBlY2hvaW5nIFRoaW5rIEJlbGlldmUgMSAoYnV0IG5vdCBUaGluayBCZWxpZXZlIDIpLgotICoqQ2F0ZWdvcnkgKHJlbGlnaW91cykgeCBDb3VudHJ5IChDaC4pKio6IFRoZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiByZXNwb25zZXMgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yaWVzIHdhcyBubyBzbWFsbGVyIG9yIGxhcmdlciBpbiBDaGluYSB0aGFuIGluIG90aGVyIGNvdW50cmllcy4KLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpIHggQ291bnRyeSAoVnQuKSoqOiBUaGUgZGlmZmVyZW5jZSBpbiByYXRlcyBvZiAiYmVsaWV2ZSIgcmVzcG9uc2VzIGJldHdlZW4gcXVlc3Rpb24gY2F0ZWdvcmllcyB3YXMgbm8gc21hbGxlciBvciBsYXJnZXIgaW4gVmFudWF0dSB0aGFuIGluIG90aGVyIGNvdW50cmllcy4KCioqVGFrZS1hd2F5OiBUaGUgcHJlZGljdGVkIGVmZmVjdCBpcyBldmlkZW50IGluIHRoaXMgZGF0YXNldC4gSXQgYXBwZWFycyB0byBiZSBleGFnZ2VyYXRlZCBpbiBUaGFpbGFuZCBhbmQgZGltaW5pc2hlZCBpbiBHaGFuYS4qKgoKIyMgS1cgQW5hbHlzZXMgIzFhLTFlIChieSBjb3VudHJ5KQoKTmV4dCwgSSBkaWQgdGhpcyBzYW1lIGFuYWx5c2lzIHdpdGhpbiBlYWNoIGNvdW50cnkvbGFuZ2F1Z2UgYWxvbmUgKHVzaW5nIHRoZSBtb3N0IG1heGltYWwgcmFuZG9tIGVmZmVjdCBzdHJ1Y3R1cmUgdGhhdCBjb252ZXJnZWQgYWNyb3NzIGFsbCBjb3VudHJpZXMvbGFuZ3VhZ2VzKS4gCgpgYGB7ciwgZWNobyA9IFR9CiMgbm90ZTogdXNpbmcgbW9zdCBtYXhpbWFsIGNvbW1vbiByYW5kb20gZWZmZWN0cyBzdHJ1Y3R1cmUKcjMuMV91cyA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKyAKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICMgKDEgfCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkM19sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVVMiKSkKCnIzLjFfZ2ggPC0gbG1lcihiZWxpZXZlIH4gc3VwZXJfY2F0ICsgCiAgICAgICAgICAgICAgICAgICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAgICAjICgxIHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8IHRoYjNfc3ViaiksCiAgICAgICAgICAgICAgICBkYXRhID0gZDNfbG9uZyAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIkdoYW5hIikpCgpyMy4xX3RoIDwtIGxtZXIoYmVsaWV2ZSB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAoMSArIHN1cGVyX2NhdCB8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICMgKDEgKyBzdXBlcl9jYXQgfHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgICAgIyAoMSB8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICMgKDEgKyBzdXBlcl9jYXQgfCB0aGIzX3N1YmopLAogICAgICAgICAgICAgICAgZGF0YSA9IGQzX2xvbmcgJT4lIGZpbHRlcihjb3VudHJ5ID09ICJUaGFpbGFuZCIpKQoKcjMuMV9jaCA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKyAKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICMgKDEgfCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkM19sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiQ2hpbmEiKSkKCnIzLjFfdnQgPC0gbG1lcihiZWxpZXZlIH4gc3VwZXJfY2F0ICsgCiAgICAgICAgICAgICAgICAgICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAjICgxIHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8IHRoYjNfc3ViaiksCiAgICAgICAgICAgICAgICBkYXRhID0gZDNfbG9uZyAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7cn0KYmluZF9yb3dzKHJlZ3RhYl9mdW4ocjMuMV91cykgJT4lIG11dGF0ZShDb3VudHJ5ID0gIlVTIiksCiAgICAgICAgICByZWd0YWJfZnVuKHIzLjFfZ2gpICU+JSBtdXRhdGUoQ291bnRyeSA9ICJHaGFuYSIpLAogICAgICAgICAgcmVndGFiX2Z1bihyMy4xX3RoKSAlPiUgbXV0YXRlKENvdW50cnkgPSAiVGhhaWxhbmQiKSwKICAgICAgICAgIHJlZ3RhYl9mdW4ocjMuMV9jaCkgJT4lIG11dGF0ZShDb3VudHJ5ID0gIkNoaW5hIiksCiAgICAgICAgICByZWd0YWJfZnVuKHIzLjFfdnQpICU+JSBtdXRhdGUoQ291bnRyeSA9ICJWYW51YXR1IikpICU+JQogIHNlbGVjdChDb3VudHJ5LCBldmVyeXRoaW5nKCkpICU+JQogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBzZXEoMiwgMTAsIDIpKSAlPiUKICBjb2xsYXBzZV9yb3dzKDEpCmBgYAoKVGhlIGVmZmVjdHMgb2YgcHJpbWFyeSBpbnRlcmVzdCBhcmUgaW4gYm9sZCwgYW5kICoqdGhlIHRha2UtYXdheSBpcyBmYWlybHkgY2xlYXI6IEluIGV2ZXJ5IGNvdW50cnkvbGFuZ3VhZ2UgRVhDRVBUIGZvciBHaGFuYS9GYW50ZSwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gc2F5ICJiZWxpZXZlIiBpbiAicmVsaWdpb3VzIiBxdWVzdGlvbnMgdGhhbiBpbiAiZmFjdCIgcXVlc3Rpb25zKiouCgoKIyMgS1cgQW5hbHlzaXMgIzIKCkluIHRoaXMgYW5hbHlzaXMsIEkgdHJlYXRlZCBjb3VudHJ5L2xhbmd1YWdlIGFzIGEgcmFuZG9tIHJhdGhlciB0aGFuIGZpeGVkIGVmZmVjdCAod2l0aCBwYXJ0aWNpcGFudHMgbmVzdGVkIHdpdGhpbiBjb3VudHJpZXMpLiAoTm90ZSB0aGF0IEkgaGFkIHRvIHVzZSBhIHNpbXBsZXIgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlIGluIG9yZGVyIHRvIGdldCB0aGUgbW9kZWwgdG8gY29udmVyZ2UuKQoKYGBge3IsIGVjaG8gPSBUfQpyMy4yIDwtIGxtZXIoYmVsaWV2ZSB+IHN1cGVyX2NhdCAKICAgICAgICAgICAgICsgKDEgKyBzdXBlcl9jYXQgfCBjb3VudHJ5L3RoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfHwgY291bnRyeS90aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCBjb3VudHJ5L3RoYjNfc3ViaiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAjICsgKDEgfCBjb3VudHJ5L3RoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgIGRhdGEgPSBkM19sb25nKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIzLjIpICU+JSByZWd0YWJfc3R5bGVfZnVuKHJvd19lbXBoID0gMikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJlZ3RhYl9yYW5fZnVuKHIzLjIsIHN1YmpfdmFyID0gInRoYjNfc3ViaiIpICU+JSByZWd0YWJfc3R5bGVfZnVuKCkKYGBgCgpUaGUgZWZmZWN0IHN0aWxsIGhvbGRzLgoKCiMgQW5hbHlzaXM6IEJhc2VkIG9uIHByZXJlZ2lzdHJhdGlvbgoKRnJvbSBwcmVyZWdpc3RyYXRpb246Cgo+ICJTdXJ2ZXkgMTogV2Ugd2lsbCBjb25kdWN0IGEgNSAoU2l0ZTogQ2hpbmEgdnMuIFRoYWlsYW5kIHZzLiBWYW51YXR1IHZzLiBHaGFuYSB2cy4gVW5pdGVkIFN0YXRlcykgeCAyIChTdGF0ZW1lbnQgVHlwZTogcmVsaWdpb24gdnMuIGZhY3QpIG1peGVkIEFOT1ZBIHdpdGggcmVwZWF0ZWQgbWVhc3VyZXMgb24gdGhlIHNlY29uZCBmYWN0b3IgYW5kIHRoZSBwcm9wb3J0aW9uIG9mIHRyaWFscyBvbiB3aGljaCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIHNlbnRlbmNlcyB1c2luZyBhIGZvcm0gdGhlIHdvcmQg4oCcYmVsaWV2ZeKAnSAob3IgaXRzIHJlc3BlY3RpdmUgdHJhbnNsYXRpb24pIGFzIHRoZSBkZXBlbmRlbnQgbWVhc3VyZS4gVG8gbG9vayBmb3IgZmluZXItZ3JhaW5lZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRpZmZlcmVudCByZWxpZ2lvdXMgYW5kIGZhY3R1YWwgc3RhdGVtZW50cywgd2Ugd2lsbCBhbHNvIGNvbmR1Y3QgYSA1IChTaXRlOiBDaGluYSB2cy4gVGhhaWxhbmQgdnMuIFZhbnVhdHUgdnMuIEdoYW5hIHZzLiBVbml0ZWQgU3RhdGVzKSB4IDUgKFN0YXRlbWVudCBUeXBlOiBCdWRkaGlzdCByZWxpZ2lvdXMgc3RhdGVtZW50cyB2cy4gQ2hyaXN0aWFuIHJlbGlnaW91cyBzdGF0ZW1lbnRzIHZzLiBsaWZlIGZhY3RzIHZzLiB3ZWxsLWtub3duIGZhY3RzIHZzLiBlc290ZXJpYyBmYWN0cykgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgc2VudGVuY2VzIHVzaW5nIGEgZm9ybSBvZiB0aGUgd29yZCDigJxiZWxpZXZl4oCdIChvciBpdHMgcmVzcGVjdGl2ZSB0cmFuc2xhdGlvbikgYXMgdGhlIGRlcGVuZGVudCBtZWFzdXJlLiBJbiBhbGwgY2FzZXMgd2hlcmUgb21uaWJ1cyBBTk9WQXMgYXJlIHNpZ25pZmljYW50LCB3ZSB3aWxsIGNvbmR1Y3QgcGFpcndpc2UgYW5hbHlzZXMgY29tcGFyaW5nIGVhY2ggc3RhdGVtZW50IHR5cGUgd2l0aCBlYWNoIG90aGVyIHN0YXRlbWVudCB0eXBlIGFuZCBlYWNoIHNpdGUgd2l0aCBlYWNoIG90aGVyIHNpdGUuIgoKYGBge3IsIGVjaG8gPSBUfQpkM19hbm92YSA8LSBkM19sb25nICU+JQogIGRpc3RpbmN0KHRoYjNfc3ViaiwgY291bnRyeSwgc3VwZXJfY2F0LCBxdWVzdGlvbiwgYmVsaWV2ZSkgJT4lCiAgZ3JvdXBfYnkodGhiM19zdWJqLCBjb3VudHJ5LCBzdXBlcl9jYXQpICU+JQogIHN1bW1hcmlzZShwcm9wX2JlbGlldmUgPSBtZWFuKGJlbGlldmUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHRoYjNfc3ViaiA9IGZhY3Rvcih0aGIzX3N1YmopKQoKY29udHJhc3RzKGQzX2Fub3ZhJGNvdW50cnkpIDwtIGNvbnRyYXN0X2NvdW50cnkKY29udHJhc3RzKGQzX2Fub3ZhJHN1cGVyX2NhdCkgPC0gY29udHJhc3Rfc3VwZXJfY2F0CmBgYAoKIyMgUHJlcmVnIEFuYWx5c2lzICMxCgpIZXJlIGlzIHRoZSBmaXJzdCBwcmVyZWdpc3RlcmVkIGFuYWx5aXM6IGEgNSAoY291bnRyeSkgeCAyIChxdWVzdGlvbiBjYXRlZ29yeSkgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyBjaXJjbGVkICJiZXJsaWV2ZSIgYXMgdGhlIERWLgoKYGBge3IsIGVjaG8gPSBUfQpyMy40IDwtIGQzX2Fub3ZhICU+JQogIGFub3ZhX3Rlc3QoZHYgPSBwcm9wX2JlbGlldmUsIAogICAgICAgICAgICAgd2lkID0gdGhiM19zdWJqLCAKICAgICAgICAgICAgIGJldHdlZW4gPSBjb3VudHJ5LCAKICAgICAgICAgICAgIHdpdGhpbiA9IHN1cGVyX2NhdCkKCmdldF9hbm92YV90YWJsZShyMy40KQpgYGAKClRoaXMgYW5hbHlzaXMgYWxpZ25zIHdpdGggdGhlIHJlZ3Jlc3Npb25zIGFib3ZlLCBzdWdnZXN0aW5nIHRoYXQgcGFydGljaXBhbnRzJyB0ZW5kZW5jeSB0byBjaXJjbGUgImJlbGlldmUiIHZhcmllZCBieSBxdWVzdGlvbiBjYXRlZ29yeSAoYHN1cGVyX2NhdGApICh0aG91Z2gsIGluIHRoaXMgYW5hbHlzaXMsICpub3QqIGJ5IGNvdW50cnkgW2Bjb3VudHJ5YF0pLCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yeSB2YXJpZWQgYWNyb3NzIGNvdW50cmllcy9sYW5ndWFnZXMgKGkuZS4sIHRoZXJlIHdhcyBhbiBpbnRlcmFjdGlvbjogYGNvdW50cnk6c3VwZXJfY2F0YCkuCgpUaGUgcHJlcmVnaXN0cmF0aW9uIGluZGljYXRlZCB0aGF0IHdlJ2QgY29uZHVjdCBwYWlyd2lzZSBmb2xsb3ctdXAgYW5hbHlzZXMgY29tcGFyaW5nIHRoZSB0d28gcXVlc3Rpb24gY2F0ZWdvcmllcyBhbmQgY29tcGFyaW5nIHBhaXJzIG9mIGNvdW50aXJlcy9sYW5ndWFnZXMgLS0gYnV0LCBhZ2FpbiwgSSBkb24ndCByZWFsbHkgdGhpbmsgd2UncmUgaW50ZXJlc3RlZCBpbiBjb21wYXJpbmcgcGFpcnMgb2YgY291bnRyaWVzL2xhbmd1YWdlcywgc28gSSdtIGdvaW5nIHRvIHNraXAgdGhhdCBmb3Igbm93LiBJbnN0ZWFkLCBJJ2xsIGNvbXBhcmUgdGhlIHR3byBxdWVzdGlvbnMgY2F0ZWdvcmllcyB3aXRoaW4gZWFjaCBjb3VudHJ5L2xhbmd1YWdlICh0byBleHBsb3JlIHRoZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbikuCgpIZXJlIHdlIGdvOgoKIyMjIENvbXBhcmluZyBxdWVzdGlvbiBjYXRlZ29yaWVzCgpgYGB7ciwgZWNobyA9IFR9CnIzLjVhIDwtIHQudGVzdChwcm9wX2JlbGlldmUgfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsIGQzX2Fub3ZhKTsgcjMuNWEKYGBgCgpDb2xsYXBzaW5nIGFjcm9zcyBjb3VudHJpZXMvbGFuZ3VhZ2VzLCAqKnBhcnRpY2lwYW50cyBjaXJjbGVkIHNpZ25pZmljYW50bHkgbW9yZSAiYmVsaWV2ZSIgcmVzcG9uc2VzIGZvciBxdWVzdGlvbnMgaW4gdGhlIHJlbGlnaW91cyBjYXRlZ29yeSAoYHIgMTAwICogKHIzLjVhJGVzdGltYXRlWzFdICU+JSByb3VuZCgyKSlgJSkgdGhhbiB0aGV5IGRpZCBmb3IgcXVlc3Rpb25zIGluIHRoZSBmYWN0IGNhdGVnb3J5IChgciAxMDAgKiAocjMuNWEkZXN0aW1hdGVbMl0gJT4lIHJvdW5kKDIpKWAlKSoqLgoKIyMjIENvbXBhcmluZyBxdWVzdGlvbiBjYXRlZ29yaWVzIHdpdGhpbiBjb3VudHJpZXMvbGFuZ3VhZ2VzCgpgYGB7ciwgZWNobyA9IFR9CiMgVVMKcjMuNWJfdXMgPC0gdC50ZXN0KHByb3BfYmVsaWV2ZSB+IHN1cGVyX2NhdCwgcGFpcmVkID0gVCwKICAgICAgICAgICAgICAgICAgIGQzX2Fub3ZhICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVVMiKSk7IHIzLjViX3VzCgojIEdoYW5hCnIzLjViX2doIDwtIHQudGVzdChwcm9wX2JlbGlldmUgfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkM19hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIkdoYW5hIikpOyByMy41Yl9naAoKCiMgVGhhaWxhbmQKcjMuNWJfdGggPC0gdC50ZXN0KHByb3BfYmVsaWV2ZSB+IHN1cGVyX2NhdCwgcGFpcmVkID0gVCwKICAgICAgICAgICAgICAgICAgIGQzX2Fub3ZhICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVGhhaWxhbmQiKSk7IHIzLjViX3RoCgojIENoaW5hCnIzLjViX2NoIDwtIHQudGVzdChwcm9wX2JlbGlldmUgfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkM19hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIkNoaW5hIikpOyByMy41Yl9jaAoKIyBWYW51YXR1CnIzLjViX3Z0IDwtIHQudGVzdChwcm9wX2JlbGlldmUgfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkM19hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlZhbnVhdHUiKSk7IHIzLjViX3Z0CmBgYAoKKipUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNpZ25pZmljYW50IGluIGVhY2ggY291bnRyeS9sYW5ndWFnZSBjb25zaWRlcmVkIGFsb25lLCBFWENFUFQgR2hhbmEvRmFudGUuKioKCgojIEFuYWx5c2lzOiBSZWxpZ2lvbiBhbmQgcmVsaWdpb3NpdHkKCiMjIERlbW9ncmFwaGljcwoKRmlyc3QsIGxldCdzIGp1c3QgbG9vayBhdCBob3cgcGVvcGxlIGluIGRpZmZlcmVudCBjb3VudHJpZXMgcmVwbGllZCB0byB0aGUgcmVsZXZhbnQgcXVlc3Rpb25zLiAKCiMjIyBgdGhiM19kZW1vX3JlZ3BgOiAiQXJlIHlvdSBhIHBhcnQgb2YgYW55IHJlbGlnaW91cyBncm91cD8iCgpgYGB7cn0KZDMgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnRyeV9uLCAKICAgICAgICAgICAgICMgcHV0IE5BcyBvbiB0b3Agb2YgYmFyCiAgICAgICAgICAgICBmaWxsID0gZmFjdG9yKHRoYjNfZGVtb19yZWdwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKE5BLCAiTk8iLCAiWUVTIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gTlVMTCkpKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsKICBsYWJzKHggPSAiY291bnRyeSIsIHkgPSAicHJvcG9ydGlvbiIsIAogICAgICAgZmlsbCA9ICJBcmUgeW91IGEgcGFydCBvZiBhbnkgcmVsaWdpb3VzIGdyb3VwPyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikKYGBgCgojIyMgYHRoYjNfZGVtb19yZWdwXzFfVEVYVGA6ICJBcmUgeW91IGEgcGFydCBvZiBhbnkgcmVsaWdpb3VzIGdyb3VwPyBJZiB5ZXMsIHdoYXQgZ3JvdXA/IgoKYGBge3J9CmQzICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDMpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnlfbiwgCiAgICAgICAgICAgICAjIHB1dCBOQXMgb24gdG9wIG9mIGJhcgogICAgICAgICAgICAgZmlsbCA9IGZhY3RvcihyZWxpZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhOQSwgIk90aGVyIiwgIkNocmlzdGlhbiIsICJCdWRkaGlzdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gTlVMTCkpKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsKICBsYWJzKHggPSAiY291bnRyeSIsIHkgPSAicHJvcG9ydGlvbiIsIAogICAgICAgZmlsbCA9ICIuLi5JZiB5ZXMsIHdoYXQgZ3JvdXA/IikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCiMjIyBgdGhiM19kZW1vX3JlbHlgOiAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8gKDEgPSBub3QgcmVsaWdpb3VzIGF0IGFsbCwgNyA9CmV4dHJlbWVseSByZWxpZ2lvdXMpIgoKU2VlbXMgdG8gaGF2ZSBiZWVuIG9taXR0ZWQgaW4gVGhhaWxhbmQ/CgpgYGB7cn0KZDMgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYXMubnVtZXJpYyh0aGIzX2RlbW9fcmVseSkpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAxOjcsIG1pbm9yX2JyZWFrcyA9IE5VTEwpICsKICBsYWJzKHggPSAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiM19kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKClNlZW1zIHRvIGhhdmUgYmVlbiBvbWl0dGVkIGluIFRoYWlsYW5kPwoKYGBge3J9CmQzICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDMpICU+JQogIGdncGxvdChhZXMoeCA9IGFzLm51bWVyaWModGhiM19kZW1vX2ltcHIpKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMTo3LCBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgbGFicyh4ID0gIkZyb20gMSB0byA3LCBob3cgaW1wb3J0YW50IHRvIHlvdSBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiM19kZW1vX3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3J9CmQzICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDMpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjNfZGVtb193b3JzKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2JhcigpICsKICBsYWJzKHggPSAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IiwgCiAgICAgICB5ID0gImNvdW50IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkKYGBgCgojIyMgYHRoYjNfZGVtb19iZ29kYDogIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIKCmBgYHtyfQpkMyAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QzKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIzX2RlbW9fYmdvZCkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9iYXIoKSArCiAgbGFicyh4ID0gIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIzX2RlbW9fYmJ1aGA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iCgpgYGB7cn0KZDMgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiM19kZW1vX2JidWgpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iLCAKICAgICAgIHkgPSAiY291bnQiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKQpgYGAKCiMjIyBgdGhiM19kZW1vX2Jvc3BgOiAiV2hhdCBiZXN0IGRlc2NyaWJlcyB5b3VyIGxldmVsIG9mIGJlbGllZiBpbiBhbm90aGVyIHNwaXJpdHVhbCBiZWluZyAob3RoZXIgdGhhbiBHb2Qgb3IgQnVkZGhhKT8iCgpgYGB7cn0KZDMgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiM19kZW1vX2Jvc3ApKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIGFub3RoZXIgc3Bpcml0dWFsIGJlaW5nIChvdGhlciB0aGFuIEdvZCBvciBCdWRkaGEpPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIzX2RlbW9fYXRzbmA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPwoKYGBge3IsIGZpZy53aWR0aCA9IDMuNSwgZmlnLmFzcCA9IDAuOH0KZDMgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMykgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiM19kZW1vX2F0c24pKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIzX2RlbW9faW1zbmA6ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8gKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyfQpkMyAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QzKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhcy5udW1lcmljKHRoYjNfZGVtb19pbXNuKSkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDE6NywgbWlub3JfYnJlYWtzID0gTlVMTCkgKwogIGxhYnMoeCA9ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIEFuYWx5c2VzCgpOb3csIGxldCdzIGxvb2sgYXQgaG93IHJlc3BvbnNlcyB0byBvdXIgdGhpbmsvYmVsaWV2ZSBxdWVzdGlvbnMgbWlnaHQgaGF2ZSB2YXJpZWQgZGVwZW5kaW5nIG9uIHJlbGlnaW9zaXR5L2V0Yy4gRm9yIG5vdywgSSdsbCBqdXN0IGZvY3VzIG9uIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0aGF0IHNlZW0gdG8gaGF2ZSBiZWVuIGFuc3dlcmVkIGluIHJlYXNvbmFibGUgd2F5cy4KCiMjIyBgdGhiM19kZW1vX3JlbHlgOiDigJxGcm9tIDEgdG8gNywgaG93IHJlbGlnaW91cyBhcmUgeW91PyAoMSA9IG5vdCByZWxpZ2lvdXMgYXQgYWxsLCA3ID0gZXh0cmVtZWx5IHJlbGlnaW91cynigJ0KCmBgYHtyLCBlY2hvID0gVH0KcjMuNiA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiM19kZW1vX3JlbHlfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQzX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjNfZGVtb19yZWx5X251bSA9IHNjYWxlKHRoYjNfZGVtb19yZWx5X251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIzLjYsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiM19kZW1vX3JlbHlfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iKSAlPiUgCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMTAsIDE0OjE2KSkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgZ3JlYXRlciByZWxpZ2lvc2l0eSB3YXMgTk9UIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmNyZWFzZWQgZGlzdGluY3Rpb24gYmV0d2VlbiByZWxpZ2lvdXMgYW5kIGZhY3QgcXVlc3Rpb25zLiAoTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgb21pdHMgcGFydGljaXBhbnRzIGZyb20gVGhhaWxhbmQsIHdobyBkaWQgbm90IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGFib3V0IHJlbGlnaW9zaXR5LikKCmBgYHtyfQpkM19sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIzX3N1YmosIHRoYjNfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiM19kZW1vX3JlbHlfbnVtLCB5ID0gYmVsaWV2ZV9wcm9wLCBjb2xvciA9IHN1cGVyX2NhdCkpICsKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4xLCBoZWlnaHQgPSAwLjAyKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAwOjYsIGxhYmVscyA9IGxldmVscyhkMyR0aGIzX2RlbW9fcmVseSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJIb3cgcmVsaWdpb3VzIGFyZSB5b3U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkM19sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIzX3N1YmosIHRoYjNfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIHNjaWVudGlmaWMpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjNfZGVtb19yZWx5X251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDMkdGhiM19kZW1vX3JlbHkpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IHJlbGlnaW91cyBhcmUgeW91PyIsIAogICAgICAgeSA9ICJEaWZmZXJlbmNlIGluIHByb3BvcnRpb24gJ2JlbGlldmUnIHJlc3BvbnNlc1xuKHJlbGlnaW91cyBxdWVzdGlvbnMgLSBzY2llbnRpZmljIHF1ZXN0aW9ucykiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCiMjIyBgdGhiM19kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyLCBlY2hvID0gVH0KcjMuNyA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiM19kZW1vX2ltcHJfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQzX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjNfZGVtb19pbXByX251bSA9IHNjYWxlKHRoYjNfZGVtb19pbXByX251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIzLjcsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiM19kZW1vX2ltcHJfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDEwLCAxNDoxNikpCmBgYAoKVGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IG1vcmUgaW1wb3J0YW5jZSBwbGFjZWQgb24gcmVsaWdpb3VzIHByYWN0aWNlIHdhcyBOT1QgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlZCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlbGlnaW91cyBhbmQgZmFjdCBxdWVzdGlvbnMuIChOb3RlIHRoYXQgdGhpcyBhbmFseXNpcyBvbWl0cyBwYXJ0aWNpcGFudHMgZnJvbSBUaGFpbGFuZCwgd2hvIGRpZCBub3QgYW5zd2VyIHRoaXMgcXVlc3Rpb24gYWJvdXQgcmVsaWdpb3NpdHkuKQoKYGBge3J9CmQzX2xvbmcgJT4lIAogIGZpbHRlcihjb3VudHJ5ICE9ICJUaGFpbGFuZCIpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIHRoYjNfc3ViaiwgdGhiM19kZW1vX2ltcHJfbnVtLCBzdXBlcl9jYXQpICU+JQogIHN1bW1hcmlzZShiZWxpZXZlX3Byb3AgPSBtZWFuKGJlbGlldmUsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIzX2RlbW9faW1wcl9udW0sIHkgPSBiZWxpZXZlX3Byb3AsIGNvbG9yID0gc3VwZXJfY2F0KSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvdW50cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMDIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NiwgbGFiZWxzID0gbGV2ZWxzKGQzJHRoYjNfZGVtb19pbXByKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh4ID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkM19sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIzX3N1YmosIHRoYjNfZGVtb19pbXByX251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIHNjaWVudGlmaWMpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjNfZGVtb19pbXByX251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDMkdGhiM19kZW1vX2ltcHIpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IGltcG9ydGFudCBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiRGlmZmVyZW5jZSBpbiBwcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXNcbihyZWxpZ2lvdXMgcXVlc3Rpb25zIC0gc2NpZW50aWZpYyBxdWVzdGlvbnMpIiwKICAgICAgIGNvbG9yID0gIkNhdGVnb3J5IikKYGBgCgojIyMgYHRoYjNfZGVtb3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3IsIGVjaG8gPSBUfQpyMy44IDwtIGxtZXIoYmVsaWV2ZSB+IHN1cGVyX2NhdCAqIGNvdW50cnkgKiB0aGIzX2RlbW9fd29yc19udW0KICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8IHRoYjNfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCB0aGIzX3N1YmopICsgKDEgfCBxdWVzdGlvbiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICArICgxIHwgdGhiM19zdWJqKSArICgxIHwgcXVlc3Rpb24pLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgZGF0YSA9IGQzX2xvbmcgJT4lIAogICAgICAgICAgICAgICBtdXRhdGUodGhiM19kZW1vX3dvcnNfbnVtID0gc2NhbGUodGhiM19kZW1vX3dvcnNfbnVtKSkpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjMuOCwgc3RkX2JldGEgPSBULCAKICAgICAgICAgICBwcmVkaWN0b3JfdmFyMSA9ICJ0aGIzX2RlbW9fd29yc19udW0iLCAKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTEgPSAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDEyLCAxNzoyMCkpCmBgYAoKVGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IGZyZXF1ZW5jeSBvZiBhdHRlbmRlbmNlIHdhcyBOT1QgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlZCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlbGlnaW91cyBhbmQgZmFjdCBxdWVzdGlvbnMuIAoKYGBge3J9CmQzX2xvbmcgJT4lIAogIGdyb3VwX2J5KGNvdW50cnksIHRoYjNfc3ViaiwgdGhiM19kZW1vX3dvcnNfbnVtLCBzdXBlcl9jYXQpICU+JQogIHN1bW1hcmlzZShiZWxpZXZlX3Byb3AgPSBtZWFuKGJlbGlldmUsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIzX2RlbW9fd29yc19udW0sIHkgPSBiZWxpZXZlX3Byb3AsIGNvbG9yID0gc3VwZXJfY2F0KSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvdW50cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMDIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NCwgbGFiZWxzID0gbGV2ZWxzKGQzJHRoYjNfZGVtb193b3JzKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnMoeCA9ICJIb3cgb2Z0ZW4gZG8geW91IGF0dGVuZCBwbGFjZXMgb2Ygd29yc2hpcD8iLCAKICAgICAgIHkgPSAiUHJvcG9ydGlvbiAnYmVsaWV2ZScgcmVzcG9uc2VzIiwKICAgICAgIGNvbG9yID0gIkNhdGVnb3J5IikKYGBgCgpgYGB7cn0KZDNfbG9uZyAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeSwgdGhiM19zdWJqLCB0aGIzX2RlbW9fd29yc19udW0sIHN1cGVyX2NhdCkgJT4lCiAgc3VtbWFyaXNlKGJlbGlldmVfcHJvcCA9IG1lYW4oYmVsaWV2ZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNwcmVhZChzdXBlcl9jYXQsIGJlbGlldmVfcHJvcCkgJT4lCiAgbXV0YXRlKGRpZmYgPSByZWxpZ2lvdXMgLSBzY2llbnRpZmljKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIzX2RlbW9fd29yc19udW0sIHkgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvdW50cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMDIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NCwgbGFiZWxzID0gbGV2ZWxzKGQzJHRoYjNfZGVtb193b3JzKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnMoeCA9ICJIb3cgb2Z0ZW4gZG8geW91IGF0dGVuZCBwbGFjZXMgb2Ygd29yc2hpcD8iLCAKICAgICAgIHkgPSAiRGlmZmVyZW5jZSBpbiBwcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXNcbihyZWxpZ2lvdXMgcXVlc3Rpb25zIC0gc2NpZW50aWZpYyBxdWVzdGlvbnMpIiwKICAgICAgIGNvbG9yID0gIkNhdGVnb3J5IikKYGBgCgoKCgo=